import { Navigate, useLocation } from 'react-router-dom';
import RouteUtil from '@/utils/route.js';
import { routeList } from '@/router';
import TokenUtil from '@/utils/token.js';
import StringUtil from '@/utils/string.js';
import useUserStore from '@/store/use-user-store.js';
import { useEffect } from 'react';

/**
 * 路由守卫
 *
 * @param props 属性
 * @param props.children 子组件
 */
function RouteGuard(props) {
  const { pathname } = useLocation();
  const isLogin = useUserStore((s) => s.isLogin);
  const token = useUserStore((s) => s.token);

  useEffect(() => {
    if (isLogin) {
      // 如果用户已经登录，则获取用户信息
      useUserStore.getState().getUser();
    }
  }, [isLogin]);

  // 检查cookie中是否存在token
  if (StringUtil.isEmpty(token)) {
    const cookieToken = TokenUtil.getToken();
    if (StringUtil.isNotEmpty(cookieToken)) {
      useUserStore.getState().setToken(cookieToken);
    }
  }

  // 获取当前路径对应的路由配置
  const route = RouteUtil.matchRoute(pathname, routeList);
  const isAuth = (route && route?.auth) ?? true;

  // 如果isAuth为false，则不需要进行登录验证
  if (!isAuth) {
    // 如果用户已经登录，并且在登录页面，则重定向到主页
    if (isLogin && pathname === '/login') {
      return <Navigate to="/" />;
    }
    return props.children;
  }

  // 登录，则进入主页，否则重定向到登录页
  return isLogin ? <>{props.children}</> : <Navigate to="/login" />;
}

export default RouteGuard;
